<?php
/**
 * Created by PhpStorm.
 * User: Leng
 * Date: 2017/8/1
 * Time: 0:28
 */
namespace Core;

class RouteCore{
    static function route(){
//        if(!preg_match('/^[A-Za-z](\/|\w)*$/',CONTROLLER_NAME)){ // 安全检测
//            $module  =  false;
//        }elseif(C('ACTION_BIND_CLASS')){
//            // 操作绑定到类：模块\Controller\控制器\操作
//            $layer  =   C('DEFAULT_C_LAYER');
//            if(is_dir(MODULE_PATH.$layer.'/'.CONTROLLER_NAME)){
//                $namespace  =   MODULE_NAME.'\\'.$layer.'\\'.CONTROLLER_NAME.'\\';
//            }else{
//                // 空控制器
//                $namespace  =   MODULE_NAME.'\\'.$layer.'\\_empty\\';
//            }
//            $actionName     =   strtolower(ACTION_NAME);
//            if(class_exists($namespace.$actionName)){
//                $class   =  $namespace.$actionName;
//            }elseif(class_exists($namespace.'_empty')){
//                // 空操作
//                $class   =  $namespace.'_empty';
//            }else{
//                E(L('_ERROR_ACTION_').':'.ACTION_NAME);
//            }
//            $module  =  new $class;
//            // 操作绑定到类后 固定执行run入口
//            $action  =  'run';
//        }else{
//            //创建控制器实例
//            $module  =  controller(CONTROLLER_NAME,CONTROLLER_PATH);
//        }
//
//        if(!$module) {
//            if('4e5e5d7364f443e28fbf0d3ae744a59a' == CONTROLLER_NAME) {
//                header("Content-type:image/png");
//                exit(base64_decode(App::logo()));
//            }
//
//            // 是否定义Empty控制器
//            $module = A('Empty');
//            if(!$module){
//                E(L('_CONTROLLER_NOT_EXIST_').':'.CONTROLLER_NAME);
//            }
//        }
//
//        // 获取当前操作名 支持动态路由
//        if(!isset($action)){
//            $action    =   ACTION_NAME.C('ACTION_SUFFIX');
//        }
//        try{
//            if(!preg_match('/^[A-Za-z](\w)*$/',$action)){
//                // 非法操作
//                throw new \ReflectionException();
//            }
//            //执行当前操作
//            $method =   new \ReflectionMethod($module, $action);
//            if($method->isPublic() && !$method->isStatic()) {
//                $class  =   new \ReflectionClass($module);
//                // 前置操作
//                if($class->hasMethod('_before_'.$action)) {
//                    $before =   $class->getMethod('_before_'.$action);
//                    if($before->isPublic()) {
//                        $before->invoke($module);
//                    }
//                }
//                // URL参数绑定检测
//                if($method->getNumberOfParameters()>0 && C('URL_PARAMS_BIND')){
//                    switch($_SERVER['REQUEST_METHOD']) {
//                        case 'POST':
//                            $vars    =  array_merge($_GET,$_POST);
//                            break;
//                        case 'PUT':
//                            parse_str(file_get_contents('php://input'), $vars);
//                            break;
//                        default:
//                            $vars  =  $_GET;
//                    }
//                    $params =  $method->getParameters();
//                    $paramsBindType     =   C('URL_PARAMS_BIND_TYPE');
//                    foreach ($params as $param){
//                        $name = $param->getName();
//                        if( 1 == $paramsBindType && !empty($vars) ){
//                            $args[] =   array_shift($vars);
//                        }elseif( 0 == $paramsBindType && isset($vars[$name])){
//                            $args[] =   $vars[$name];
//                        }elseif($param->isDefaultValueAvailable()){
//                            $args[] =   $param->getDefaultValue();
//                        }else{
//                            E(L('_PARAM_ERROR_').':'.$name);
//                        }
//                    }
//                    // 开启绑定参数过滤机制
//                    if(C('URL_PARAMS_SAFE')){
//                        array_walk_recursive($args,'filter_exp');
//                        $filters     =   C('URL_PARAMS_FILTER')?:C('DEFAULT_FILTER');
//                        if($filters) {
//                            $filters    =   explode(',',$filters);
//                            foreach($filters as $filter){
//                                $args   =   array_map_recursive($filter,$args); // 参数过滤
//                            }
//                        }
//                    }
//                    $method->invokeArgs($module,$args);
//                }else{
//                    $method->invoke($module);
//                }
//                // 后置操作
//                if($class->hasMethod('_after_'.$action)) {
//                    $after =   $class->getMethod('_after_'.$action);
//                    if($after->isPublic()) {
//                        $after->invoke($module);
//                    }
//                }
//            }else{
//                // 操作方法不是Public 抛出异常
//                throw new \ReflectionException();
//            }
//        } catch (\ReflectionException $e) {
//            // 方法调用发生异常后 引导到__call方法处理
//            $method = new \ReflectionMethod($module,'__call');
//            $method->invokeArgs($module,array($action,''));
//        }
//        return ;
    }
}